package lk.icta.core.service;


import lk.icta.core.entity.CalenderSchedule;
import lk.icta.core.entity.CalenderScheduleType;
import lk.icta.user.entity.User;

import java.util.List;

/**
 * @author Kusal Samarakoon
 */
public interface CalenderScheduleManagementService {

    /**
     * Adding a Calender Schedule
     *
     * @param schedule The Calender schedule to be added
     * @param user     The user requesting to add the Calender schedule
     */
    public void addCalenderSchedule(CalenderSchedule schedule, User user);

    /**
     * Updating a Calender Schedule
     *
     * @param schedule The Calender schedule to be updated
     * @param user     The user requesting to update teh Calender schedule
     */
    public void updateCalenderSchedule(CalenderSchedule schedule, User user);

    /**
     * Deleting a Calender schedule
     *
     * @param id The CalenderSchedule Id
     */
    public void deleteCalenderSchedule(String id);

    /**
     * Find CalenderSchedule by  Id
     *
     * @param id   The CalenderSchedule Id
     * @param user The user requesting to find the CalenderSchedule
     * @return A CalenderSchedule corresponding to the given id
     */
    public CalenderSchedule getCalenderScheduleById(String id, User user);

    /**
     * List all CalenderSchedule records
     *
     * @param user The user requesting to list CalenderSchedule records
     * @return List of all CalenderSchedule records
     */
    public List<CalenderSchedule> getAllCalenderSchedule(User user);

    /**
     * List all CalenderSchedule records by user
     *
     * @param user The user requesting to list CalenderSchedule records
     * @return List of all CalenderSchedule records by user
     */
    public List<CalenderSchedule> getAllCalenderScheduleByUser(User user);

    /**
     * List all CalenderSchedule records by CalenderScheduleType
     * <p/>
     * * @param scheduleType The scheduleType requesting to list CalenderSchedule records
     *
     * @param user The user requesting to list CalenderSchedule records
     * @return List of CalenderSchedule records by user
     */
    public List<CalenderSchedule> getAllCalenderScheduleByCalenderScheduleType(CalenderScheduleType scheduleType, User user);


}
